home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / v10n07.arc / ECHO.PAS < prev    next >
Pascal/Delphi Source File  |  1991-03-27  |  3KB  |  122 lines

  1. UNIT Echo;
  2.  
  3. INTERFACE
  4.  
  5. USES DOS;
  6.  
  7.   FUNCTION InputRedirected : Boolean;
  8.   FUNCTION OutputRedirected : Boolean;
  9.   FUNCTION OutputNul : Boolean;
  10.   FUNCTION EchoIsOn : Boolean;
  11.   PROCEDURE EchoOn;
  12.   PROCEDURE EchoOff;
  13.  
  14. IMPLEMENTATION
  15.  
  16.   FUNCTION InputRedirected : Boolean;
  17.   VAR Regs : Registers; Handle : Word ABSOLUTE Input;
  18.   BEGIN
  19.     WITH Regs DO
  20.       BEGIN
  21.         Ax := $4400;
  22.         Bx := Handle;
  23.         MsDos(Regs);
  24.         IF Dl AND $81 = $81 THEN InputRedirected := False
  25.         ELSE InputRedirected := True;
  26.       END;                        {With Regs}
  27.   END;                            {Function InputRedirected}
  28.  
  29.  
  30.   FUNCTION OutputRedirected : Boolean;
  31.   VAR Regs : Registers; Handle : Word ABSOLUTE Output;
  32.   BEGIN
  33.     WITH Regs DO
  34.       BEGIN
  35.         Ax := $4400;
  36.         Bx := Handle;
  37.         MsDos(Regs);
  38.         IF Dl AND $82 = $82 THEN OutputRedirected := False
  39.         ELSE OutputRedirected := True;
  40.       END;                        {With Regs}
  41.   END;                            {Function OutputRedirected}
  42.  
  43.  
  44.   FUNCTION OutputNul : Boolean;
  45.   VAR Regs : Registers; Handle : Word ABSOLUTE Output;
  46.   BEGIN
  47.     WITH Regs DO
  48.       BEGIN
  49.         Ax := $4400;
  50.         Bx := Handle;
  51.         MsDos(Regs);
  52.         IF Dl AND $84 <> $84 THEN OutputNul := False
  53.         ELSE OutputNul := True;
  54.       END;                        {With Regs}
  55.   END;                            {Function OutputNul}
  56.  
  57.  
  58.   FUNCTION Write40h(DataBuffer : Pointer; Count, Handle : Word) : Word;
  59.   VAR Regs : Registers;
  60.   TYPE DWord = RECORD O, S : Word; END;
  61.   BEGIN
  62.     WITH Regs DO
  63.       BEGIN
  64.         Ds := DWord(DataBuffer).S;
  65.         Dx := DWord(DataBuffer).O;
  66.         Bx := Handle;
  67.         Cx := Count;
  68.         Ah := $40;
  69.         MsDos(Regs);
  70.         IF Flags AND FCarry <> 0
  71.         THEN Write40h := 103      {- "file not open" -}
  72.         ELSE IF Ax < Cx
  73.         THEN Write40h := 101      {- "disk write error" -}
  74.         ELSE Write40h := 0;
  75.       END;                        {With Regs do}
  76.   END;                            {Function Write40h}
  77.  
  78.  
  79. {$F+} FUNCTION EchoOutput(VAR F : TextRec) : Integer; {$F-}
  80.     {- Replacement for Output text file FlushFunc and InOutFunc -}
  81.   BEGIN
  82.     WITH F DO
  83.       BEGIN
  84.         EchoOutput := Write40h(BufPtr, BufPos, 2);
  85.         EchoOutput := Write40h(BufPtr, BufPos, Handle);
  86.         BufPos := 0;
  87.       END;                        {With F do}
  88.   END;                            {Function EchoOutput}
  89.  
  90.  
  91. CONST EchoStatus : Boolean = False; {- PRIVATE to unit Echo -}
  92.  
  93.   PROCEDURE EchoOn;
  94.   BEGIN
  95.     IF OutputRedirected THEN
  96.       BEGIN
  97.         Flush(Output);
  98.         TextRec(Output).InOutFunc := @EchoOutput;
  99.         TextRec(Output).FlushFunc := @EchoOutput;
  100.         EchoStatus := True;
  101.       END;                        {If OutputRedirected}
  102.   END;                            {Procedure EchoOn}
  103.  
  104.   PROCEDURE EchoOff;
  105.   BEGIN
  106.     IF OutputRedirected THEN
  107.       BEGIN
  108.         Rewrite(Output);
  109.         EchoStatus := False;
  110.       END;                        {If OutputRedirected THEN }
  111.   END;                            {Procedure EchoOff}
  112.  
  113.   FUNCTION EchoIsOn : Boolean;
  114.   BEGIN
  115.     EchoIsOn := EchoStatus;
  116.   END;                            {Function EchoIsOn}
  117.  
  118.  
  119. BEGIN                             {- Unit initialization           -}
  120.   EchoOn;                         { - Echo all redirected output   -}
  121. END.
  122.